package j01lambda;



interface I1{
    void f1();
}
class A implements I1{
    @Override
    public void f1() {
        System.out.println(111);
    }
}



public class J1 {
    public static void main(String[] args) {
        //完整写法
        new A().f1();//111
        //进化
        new I1(){
            @Override
            public void f1() {

            }
        }.f1();
        //简化 lambda
        I1 i1 = ()->{
            System.out.println(222);
        };
        i1.f1();
    }
}

@FunctionalInterface
interface I2{
    void eat();
}
class J2{
    public static void main(String[] args) {
        //js =>   java ->
        I2 i2 = ()->{
            System.out.println(222);
        };
        i2.eat();
    }
}

interface I3{
    //无参数
//    void cry();

    //多个参数
//    void cry(int a,int b);

    //1个参数
    void cry(int a);
}
class I3Test{
    public static void main(String[] args) {
//        I3 i3 = ()->{
//            System.out.println(333);
//        };
        // 多个参数
//        I3 i3 = (int a,int b)->{
//            System.out.println("参数是：");
//            System.out.println("a = " + a);
//            System.out.println("b = " + b);
//        };
        //数据类型可以省略
//        I3 i3 = (a,b)->{
//            System.out.println("参数是：");
//            System.out.println("a = " + a);
//            System.out.println("b = " + b);
//        };
//        i3.cry(4,5);

        //1参数，参数小括号，可省略
//        I3 i3 = (a)->{
//            System.out.println(a);
//        };
        I3 i3 = a1->{
            System.out.println(a1);
        };
    }
}
//方法体
//如果方法体中，只有一行代码，花括号可以省略
interface I4 {
    void say();
}
class I4Test{
    public static void main(String[] args) {
//        I4 i4 = ()->{
//            System.out.println(111);
//            System.out.println(222);
//        };
//        i4.say();
        I4 i4 = ()->System.out.println("我是耀乐，我啥都不怕");
        i4.say();

    }
}
//如果一行代码，需要返回值，可以直接写表达式的值
interface I5{
    int f1();
}

class I5Test{
    public static void main(String[] args) {
//        I5 i5 = ()->{
////            System.out.println(111);
//            return 3;
//        };
        I5 i5 = ()->5+1;
        int x = i5.f1();
        System.out.println("x = " + x);
    }
}